/*
 * Copyright (c) 2023 fred
 * Licensed under the Apache License,Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
import constants from '../../util/Constants'
import { Token } from '../Token'
import { TokenType } from '../TokenType'

export class Doctype extends Token {

  readonly name: string[] = []
  pubSysKey: string | null = null
  publicIdentifier: string[] = []
  systemIdentifier: string[] = []
  forceQuirks = false

  constructor() {
    super()
    this.type = TokenType.Doctype
  }

  asDoctype(): Doctype {
    return this
  }

  tokenType(): string {
    return "Doctype"
  }

  reset(): Token {
    super.reset()
    constants.reset(this.name)
    this.pubSysKey = null
    constants.reset(this.publicIdentifier)
    constants.reset(this.systemIdentifier)
    this.forceQuirks = false
    return this
  }

  getName(): string {
    return this.name.join('')
  }

  getPubSysKey(): string {
    return this.pubSysKey
  }

  getPublicIdentifier(): string {
    return this.publicIdentifier.join('')
  }

  getSystemIdentifier(): string {
    return this.systemIdentifier.join('')
  }

  public isForceQuirks() {
    return this.forceQuirks
  }

  public toString(): string {
    return `<!doctype ${this.getName()}>`
  }
}